home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / fractal / kaos.lha / complib / euclid_to_polar.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-11-18  |  1.4 KB  |  58 lines

  1. /*
  2. ### primary to secandary coord transformation (euclidean to polar) ###
  3. */
  4.  
  5. euclid_to_polar(v_pol,v_euc)
  6. double v_pol[],v_euc[];
  7. {
  8.     int i;
  9.     double atan(),sqrt();
  10.     extern int var_dim,enable_polar;
  11.     extern double pi;
  12.     extern char string[];
  13.  
  14.     switch(enable_polar){
  15.         case 1:
  16.             if(var_dim == 4){
  17.                 v_pol[0] =sqrt(v_euc[0] * v_euc[0] + v_euc[2] * v_euc[2]);
  18.                 v_pol[1] =(v_euc[0]*v_euc[1]+v_euc[2]*v_euc[3])/v_pol[0];
  19.                 /* old */
  20.                 /*
  21.                 v_pol[2] =atan(v_euc[0]/v_euc[2]);
  22.                 if(v_euc[2] < 0) {
  23.                     if(v_euc[0] > 0)
  24.                         v_pol[2] += pi;
  25.                     else
  26.                         v_pol[2] -= pi;
  27.                 }
  28.                 v_pol[3] = 1/v_pol[0]/v_pol[0]*(v_euc[1] * v_euc[2] - v_euc[0] * v_euc[3]);
  29.                 */
  30.                 v_pol[2] =atan(v_euc[2]/v_euc[0]);
  31.                 if(v_euc[0] < 0) {
  32.                     if(v_euc[2] > 0)
  33.                         v_pol[2] += pi;
  34.                     else
  35.                         v_pol[2] -= pi;
  36.                 }
  37.                 v_pol[3] = 1/v_pol[0]/v_pol[0]*(v_euc[3] * v_euc[0] - v_euc[1] * v_euc[2]);
  38.             }
  39.             else {
  40.                 for(i=0; i<var_dim-1;i +=2){
  41.                     v_pol[i] =sqrt(v_euc[i] * v_euc[i] + v_euc[i+1] * v_euc[i+1]);
  42.                     v_pol[i+1] =atan(v_euc[i+1]/v_euc[i]);
  43.                 }
  44.             }
  45.             break;
  46.         case 2:
  47.             for(i=0; i<var_dim-1;i +=2){
  48.                 v_pol[i] =sqrt(v_euc[i] * v_euc[i] + v_euc[i+1] * v_euc[i+1]);
  49.                 v_pol[i+1] =atan(v_euc[i+1]/v_euc[i]);
  50.             }
  51.             break;
  52.         default:
  53.             sprintf(string,"euclid_to_polar: coord transform for mode=%d is not implemented!",enable_polar);
  54.             system_mess_proc(1,string);
  55.             break;        
  56.     }
  57. }
  58.